stuff that calls MP menu text (8005BC20)
probably starts at 7F0C40C8...

//7F0C4354:	call "<" from 8005BC28
JAL	7000441C
NOP
SLL	S0,V0,0x10
SRA	T7,S0,0x10
JAL	7000442C
OR	S0,T7,R0
LUI	T8,8004
LUI	T9,8004
LW	T9,0EAC (T9)
LW	T8,0EB0 (T8)
LUI	T2,00FF
ORI	T2,T2,00B0
LUI	A3,8006
ADDIU	A3,A3,BC28
SW	T2,0018 (SP)
OR	A0,S1,R0
ADDIU	A1,SP,00CC
ADDIU	A2,SP,00C8
SW	S0,001C (SP)
SW	V0,0020 (SP)
SW	R0,0024 (SP)
SW	R0,0028 (SP)
SW	T9,0014 (SP)
JAL	7F0ADABC
SW	T8,0010 (SP)
BEQ	R0,R0,7F0C4434
OR	S1,V0,R0
//7F0C43C0:	This probably does the highlighted "<"
JAL	7000441C
NOP
SLL	S0,V0,0x10
SRA	T1,S0,0x10
JAL	7000442C
OR	S0,T1,R0
LUI	T3,8004
LUI	T4,8004
LW	T4,0EAC (T4)
LW	T3,0EB0 (T3)
LUI	T5,A0FF
LUI	T6,0070
ORI	T6,T6,00A0
ORI	T5,T5,A0F0
LUI	A3,8006
ADDIU	A3,A3,BC28
SW	T5,0018 (SP)
SW	T6,001C (SP)
OR	A0,S1,R0
ADDIU	A1,SP,00CC
ADDIU	A2,SP,00C8
SW	S0,0020 (SP)
SW	V0,0024 (SP)
SW	R0,0028 (SP)
SW	R0,002C (SP)
SW	T4,0014 (SP)
JAL	7F0AE6EC
SW	T3,0010 (SP)
OR	S1,V0,R0
//7F0C4434:
ETC...
//7F0C44B8:	display ">"

//7F0C4524:	display highlight ">"



++++
7F00D828:	build your main folder page	1. 2. 3. etc...
ADDIU	SP,SP,FFA0
SW	RA,003C (SP)
SW	S0,0038 (SP)
OR	A1,R0,R0
OR	A2,R0,R0
JAL	700046D0
OR	A3,R0,R0
JAL	70003EF8
OR	A0,V0,R0
JAL	7F00D5E8
OR	A0,V0,R0
JAL	7F0ACD98
OR	A0,V0,R0
//7F00D85C:
ADDIU	T6,R0,0096
ADDIU	T7,R0,00DC
OR	S0,V0,R0
SW	T6,0058 (SP)	T6,T7=screen positions?
JAL	7000441C
SW	T7,0054 (SP)
JAL	7000442C
SH	V0,0044 (SP)
LUI	T8,8004
LUI	T9,8004
LW	T9,0EB4 (T9)
LW	T8,0EB8 (T8)
LH	T1,0044 (SP)
//7F00D890:	write 1. on main folder menu
LUI	A3,8005
ADDIU	T0,R0,00FF
SW	T0,0018 (SP)
ADDIU	A3,A3,F494	A3=8004F494: "1.\N"
OR	A0,S0,R0
ADDIU	A1,SP,0058
ADDIU	A2,SP,0054
SW	V0,0020 (SP)
SW	R0,0024 (SP)
SW	R0,0028 (SP)
SW	T9,0014 (SP)
SW	T8,0010 (SP)
JAL	7F009760	interpret said text
SW	T1,001C (SP)
//7F00D8C8:	test if active cheats
LUI	T2,8003
LW	T2,A900 (T2)
OR	S0,V0,R0
BEQL	T2,R0,7F00D8E8
ORI	A0,R0,9C1D	A0: SELECT MISSION
BEQ	R0,R0,7F00D8E8
ORI	A0,R0,9C75	A0: CHEAT SELECT MISSION
ORI	A0,R0,9C1D
//7F00D8E8:
JAL	7F0C1DD8	takes A0=recall text halfword; spits out V0=pointer to text
NOP
LUI	T3,8004
LW	T3,0EB4 (T3)
LUI	A3,8004
SW	V0,005C (SP)
LW	A3,0EB8 (A3)
ADDIU	A0,SP,004C
ADDIU	A1,SP,0050
OR	A2,V0,R0	A2=text pointer
SW	R0,0014 (SP)
JAL	7F0AE98C
SW	T3,0010 (SP)
//7F00D91C:
this stuff goes on through
//7F00DCAC:
LW	RA,003C (SP)
LW	S0,0038 (SP)
ADDIU	SP,SP,0060
JR	RA
NOP

---
7F0C1DD8:	returns V0&A0=pointer to text called with A0 text recall halfword!
SRA	T6,A0,0xA
SLL	T7,T6,0x2	T7=offset in table (extension, in other words)
LUI	V0,8009
ADDU	V0,V0,T7
LW	V0,C640 (V0)	V0=8008C640+offset: pointer to text bank
ANDI	T8,A0,03FF
SLL	T9,T8,0x2	T9: text value converted to an offset in bank
ADDU	T0,V0,T9
LW	V1,0000 (T0)
OR	A0,R0,R0
BEQ	V1,R0,7F0C1E14	kill if pointer inside table is invalid
NOP
ADDU	A0,V1,V0
JR	RA
OR	V0,A0,R0
//7F0C1E14:
JR	RA
OR	V0,A0,R0

---
7F009760:	routine that calls the appropriate text interpretter
LUI	T6,8005
LW	T6,84D0 (T6)
ADDIU	SP,SP,FFC8
SW	RA,0034 (SP)
BEQ	T6,R0,7F0097F8	follows this for straight text offsets
LW	T5,0048 (SP)
//7F009778:
we'll skip this for now...
//7F0097F8:	straight text
LW	T4,004C (SP)
LW	T6,0050 (SP)
LW	T7,0054 (SP)
LW	T8,0058 (SP)
LW	T9,005C (SP)
LW	T0,0060 (SP)
SW	T5,0010 (SP)
SW	T4,0014 (SP)
SW	T6,0018 (SP)
SW	T7,001C (SP)
SW	T8,0020 (SP)
SW	T9,0024 (SP)
JAL	7F0ADABC	process A3.  Put it into DL @ A0.  A1,A2 do stuff too...  RETURNS V0=new DL pos
SW	T0,0028 (SP)
OR	A0,V0,R0	A0=new DL position
//7F009834:	RETURN
LW	RA,0034 (SP)
ADDIU	SP,SP,0038
OR	V0,A0,R0
JR	RA
NOP

+++++++++
7F0ADABC:	processes c text display strings
	A0=pointer to display list (for 4folders 1st run, 800A5328)
	A1=
	A2=
	A3=pointer to text string
ADDIU	SP,SP,FF58
ADDIU	T6,R0,0001
LUI	AT,8004
LW	T8,00D0 (SP)
SW	RA,005C (SP)
SW	S8,0058 (SP)
SW	S7,0054 (SP)
SW	S6,0050 (SP)
SW	S5,004C (SP)
SW	S4,0048 (SP)
SW	S3,0044 (SP)
SW	S2,0040 (SP)
SW	S1,003C (SP)
SW	S0,0038 (SP)
SW	T6,0EA8 (AT)	T6->80040EA8
//7F0ADAF8:
LW	T7,0000 (A2)
LW	S4,0000 (A1)
OR	S0,A3,R0
OR	S1,A1,R0
OR	S2,A2,R0
OR	S3,A0,R0
ADDIU	S5,R0,0048
BNEZ	T8,7F0ADB30
SW	T7,00A0 (SP)
//7F0ADB1C:
LW	T9,00B8 (SP)
LW	T0,088C (T9)
LW	T1,0890 (T9)
ADDU	T2,T0,T1
SW	T2,00D0 (SP)
//7F0ADB30:	
LUI	T3,8005
LW	T3,84D0 (T3)	T3:800484D0...
LW	T4,00D0 (SP)
OR	A0,S3,R0
BEQ	T3,R0,7F0ADB54
SLTI	AT,T4,000E
BEQ	AT,R0,7F0ADB54
ADDIU	T5,R0,000E
SW	T5,00D0 (SP)
//7F0ADB54:	build FA op
LW	V1,00C0 (SP)
LUI	T6,FA00
SW	T6,0000 (A0)	save upper word of FA op
SRL	T9,V1,0x18
SRL	T2,V1,0x10
ANDI	T3,T2,00FF
SLL	T0,T9,0x18
SRL	T7,V1,0x8
ANDI	T8,T7,00FF
SLL	T4,T3,0x10
OR	T5,T0,T4
SLL	T9,T8,0x8
OR	T1,T5,T9
ANDI	T3,V1,00FF
OR	T0,T1,T3
SW	T0,0004 (A0)	save lower word of FA op
//7F0ADB94:	pull and handle each char of text
LBU	V0,0000 (S0)	load text character
ADDIU	S3,S3,0008
LW	S7,00BC (SP)
BEQ	V0,R0,7F0ADD78	kill on a NULL character
LW	S8,00C4 (SP)
ADDIU	S6,SP,006C
ADDIU	AT,R0,0020
//7F0ADBB0:	test if space
BNEL	V0,AT,7F0ADBD4	branch if not a space
ADDIU	AT,R0,000A
LW	T4,0000 (S1)
ADDIU	S5,R0,0048
ADDIU	S0,S0,0001
ADDIU	T6,T4,0005
BEQ	R0,R0,7F0ADD6C	Next!
SW	T6,0000 (S1)
ADDIU	AT,R0,000A
//7F0ADBD4:	test if 0A (return)
BNEL	V0,AT,7F0ADC28	branch if not a return
SLTI	AT,V0,0080
LUI	V0,8004
LW	V0,0E90 (V0)
ADDIU	S5,R0,0048
LW	T2,00D0 (SP)
BLTZ	V0,7F0ADC10
ADDIU	S0,S0,0001
LW	T7,0000 (S1)
BNEL	S4,T7,7F0ADC14
LW	T9,0000 (S2)
LW	T8,0000 (S2)
ADDU	T5,T8,V0
BEQ	R0,R0,7F0ADC1C
SW	T5,0000 (S2)
//7F0ADC10:
LW	T9,0000 (S2)
ADDU	T1,T9,T2
SW	T1,0000 (S2)
//7F0ADC1C:	Next!
BEQ	R0,R0,7F0ADD6C
SW	S4,0000 (S1)
SLTI	AT,V0,0080
//7F0ADC28:	NORMAL CHARACTERS
BEQ	AT,R0,7F0ADCA0	MULTICHARACTER support
LUI	T6,8004
ADDIU	V1,R0,0018	offset= 0x18*character value
MULTU	V0,V1
LW	T0,00B8 (SP)
LW	T8,00A0 (SP)
LW	T5,00C8 (SP)
LW	T9,00CC (SP)
OR	A0,S3,R0
OR	A1,S1,R0
OR	A2,S2,R0
SW	S7,0014 (SP)
SW	S4,0018 (SP)
MFLO	T3
ADDU	A3,T3,T0
ADDIU	A3,A3,FCE8
MULTU	S5,V1
SW	S8,0020 (SP)
SW	T8,001C (SP)
SW	T5,0024 (SP)
SW	T9,0028 (SP)
MFLO	T4
ADDU	T6,T4,T0
ADDIU	T7,T6,FCE8
JAL	7F0AD0F8
SW	T7,0010 (SP)
OR	S3,V0,R0
LBU	S5,0000 (S0)
BEQ	R0,R0,7F0ADD6C
ADDIU	S0,S0,0001
//7F0ADCA0:	MULTICHARACTER support
ADDIU	T6,T6,0EFC
LW	AT,0000 (T6)
LBU	T2,0001 (S0)
ANDI	T3,V0,007F
SW	AT,0000 (S6)
LW	T8,0004 (T6)
SLL	T4,T3,0x7
ANDI	T1,T2,007F
SW	T8,0004 (S6)
LW	AT,0008 (T6)
OR	V1,T1,T4
ANDI	A0,V1,FFFF
SW	AT,0008 (S6)
LW	T8,000C (T6)
ANDI	T5,A0,2000
ANDI	T3,A0,1FFF
SW	T8,000C (S6)
LW	AT,0010 (T6)
ADDIU	T9,R0,000F
ADDIU	T2,R0,0010
SW	AT,0010 (S6)
LW	T8,0014 (T6)
SLTI	AT,T3,03C7
BEQ	T5,R0,7F0ADD0C
SW	T8,0014 (S6)
SW	T9,0078 (SP)
SW	T2,0074 (SP)
//7F0ADD0C:
BNEL	AT,R0,7F0ADD1C
ADDIU	T1,A0,0080
ADDIU	A0,R0,0002
ADDIU	T1,A0,0080
//7F0ADD1C:
JAL	7F0C1A30
SW	T1,006C (SP)
LW	T4,00A0 (SP)
LW	T0,00C8 (SP)
LW	T7,00CC (SP)
SW	V0,0080 (SP)
OR	A0,S3,R0
OR	A1,S1,R0
OR	A2,S2,R0
OR	A3,S6,R0
SW	S6,0010 (SP)
SW	S7,0014 (SP)
SW	S4,0018 (SP)
SW	S8,0020 (SP)
SW	T4,001C (SP)
SW	T0,0024 (SP)
JAL	7F0AD0F8
SW	T7,0028 (SP)
OR	S3,V0,R0
ADDIU	S0,S0,0002
//7F0ADD6C:	loopus next character
LBU	V0,0000 (S0)
BNEL	V0,R0,7F0ADBB0
ADDIU	AT,R0,0020
//7F0ADD78:	RETURN
LW	RA,005C (SP)
OR	V0,S3,R0
LW	S3,0044 (SP)
LW	S0,0038 (SP)
LW	S1,003C (SP)
LW	S2,0040 (SP)
LW	S4,0048 (SP)
LW	S5,004C (SP)
LW	S6,0050 (SP)
LW	S7,0054 (SP)
LW	S8,0058 (SP)
JR	RA
ADDIU	SP,SP,00A8

++++++++
other text-utilizing routines:

7F00DCC0:	pulls and displays text for folder entry A0
LUI	T6,8003
LHU	T6,ABE8 (T6)	T6=text string: Arkangelsk
LUI	V0,8003
ADDIU	V0,V0,ABE4	V0=pointer to "1"
BEQ	T6,R0,7F00DD00	ditch this if no string to display
OR	V1,R0,R0
LW	T7,0014 (V0)	T7:8002ABF8= -1
//7F00DCDC:
BNEL	A0,T7,7F00DCF0
LHU	T8,0020 (V0)	T8:8002AC08= 0000
JR	RA
OR	V0,V1,R0	V0=count
LHU	T8,0020 (V0)
//7F00DCF0:
ADDIU	V1,V1,0001	V1++ (count)
ADDIU	V0,V0,001C	V0+=1C:  next entry in table
BNEL	T8,R0,7F00DCDC
LW	T7,0014 (V0)
//7F00DD00:	return invalid if never found
ADDIU	V0,R0,FFFF	V0=-1
JR	RA
NOP

-----------
70013F60	interpret text containing % characters and whatnot
	linked off MP menu "%d"